package raf;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 读写基本类型数据,以及RAF的指针操作
 */
public class RAFDemo3 {
    public static void main(String[] args) throws IOException {
        RandomAccessFile raf=new RandomAccessFile("raf.dat","rw");
        /*
        long getFilePointer()
        获取当前RAF的指针位置
         */
        System.out.println("pos:"+raf.getFilePointer());//0
        //将一个int值写入文件中
        int i=Integer.MAX_VALUE;
        /*
        i的2进制:
        01111111 11111111 11111111 11111111
            1       2         3        4
            i>>>24                        vvvvvvvvv
            000000000 000000000 000000000 011111111
            i>>>16
            000000000 000000000 011111111 111111111
            i>>>8
            000000000 011111111 111111111 111111111
            i
            011111111 111111111 111111111 111111111
         */
        raf.write(i>>>24);
        System.out.println("pos:"+raf.getFilePointer());
        raf.write(i>>>16);
        System.out.println("pos:"+raf.getFilePointer());
        raf.write(i>>>8);
        System.out.println("pos:"+raf.getFilePointer());
        raf.write(i);
        System.out.println("pos:"+raf.getFilePointer());
        /*
        RAF提供了方便写出基本类型的相关方法
         */
        raf.writeInt(i);//连续
      //  System.out.println("pos:"+raf.getFilePointer());
        raf.writeDouble(123.123);
      //  System.out.println("pos:"+raf.getFilePointer());
        raf.writeLong(123L);
      //  System.out.println("pos:"+raf.getFilePointer());
        System.out.println("写出完毕!!!!!");
        /*
        void seek(long pos)
        移动指针到指定位置
         */
        raf.seek(0);//移动指针到文件最开始(第一个字节的位置)
        System.out.println("pos:"+raf.getFilePointer());//0
        /*
        RAF提供了方便读取基本类型的相关方法
        int readInt() 连续读取4个相关字节返回对应的int值
         */
        int d=raf.readInt();//00000000 00000000 00000000 01111111
        System.out.println(d);//127
        System.out.println("pos:"+raf.getFilePointer());//4

        //读取后面的double值
        //1现将指针移动到double的第一个字节的位置
        raf.seek(8);
        //2连续读取8字节还原double值
        double dou=raf.readDouble();
        System.out.println("dou"+dou);

        long l=raf.readLong();
        System.out.println(l);

//        System.out.println(raf.readLong());

        //将double值改为234.234
        //1现将指针移动到double的第一个字节位置
        raf.seek(8);
        //2重写写入一个double值覆盖原来double的8个字节
        raf.writeDouble(234.234);
        raf.seek(8);
        dou=raf.readDouble();
        System.out.println(dou);
    }
}
